﻿startTest("dromaeo-object-string", 'ef8605c3');

// Try to force real results
var ret;
var num = 80000;

// TESTS: String concatenation

test("Concat String", function () {
    var str = "";
    for (var i = 0; i < num; i++)
        str += "a";
    ret = str;
});

test("Concat String Object", function () {
    var str = new String();
    for (var i = 0; i < num; i++)
        str += "a";
    ret = str;
});

test("Concat String from charCode", function () {
    var str = "";
    for (var i = 0; i < num / 2; i++)
        str += String.fromCharCode(97);
    ret = str;
});

test("Array String Join", function () {
    var str = [];
    for (var i = 0; i < num / 2; i++)
        str.push("a");
    ret = str.join("");
});

var ostr = [], tmp, tmp2, num = 5000, tmpstr;

for (var i = 0; i < 16384; i++)
    ostr.push(String.fromCharCode((25 * Math.random()) + 97));

ostr = ostr.join("");
ostr += ostr;
ostr += ostr;

var str;
var i = 52288;

prep(function () {
    str = new String(ostr);
});

// TESTS: split
test("String Split", function () {
    ret = str.split("");
});

prep(function () {
    tmpstr = str;
    tmpstr += tmpstr;
    tmpstr += tmpstr;
    tmpstr += tmpstr;
    tmpstr += tmpstr;
});

test("String Split on Char", function () {
    ret = tmpstr.split("a");
});

prep(function () {
    str += str;
});

// TESTS: characters

test("charAt", function () {
    for (var j = 0; j < num; j++) {
        ret = str.charAt(0);
        ret = str.charAt(str.length - 1);
        ret = str.charAt(15000);
        ret = str.charAt(12000);
    }
});

test("[Number]", function () {
    for (var j = 0; j < num; j++) {
        ret = str[0];
        ret = str[str.length - 1];
        ret = str[15000];
        ret = str[10000];
        ret = str[5000];
    }
});

test("charCodeAt", function () {
    for (var j = 0; j < num; j++) {
        ret = str.charCodeAt(0);
        ret = str.charCodeAt(str.length - 1);
        ret = str.charCodeAt(15000);
        ret = str.charCodeAt(10000);
        ret = str.charCodeAt(5000);
    }
});

// TESTS: indexOf

test("indexOf", function () {
    for (var j = 0; j < num; j++) {
        ret = str.indexOf("a");
        ret = str.indexOf("b");
        ret = str.indexOf("c");
        ret = str.indexOf("d");
    }
});

test("lastIndexOf", function () {
    for (var j = 0; j < num; j++) {
        ret = str.lastIndexOf("a");
        ret = str.lastIndexOf("b");
        ret = str.lastIndexOf("c");
        ret = str.lastIndexOf("d");
    }
});

// TESTS: slice

test("slice", function () {
    for (var j = 0; j < num; j++) {
        ret = str.slice(0);
        ret = str.slice(0, 5);
        ret = str.slice(-1);
        ret = str.slice(-6, -1);
        ret = str.slice(15000, 15005);
        ret = str.slice(12000, -1);
    }
});

// TESTS: substr

test("substr", function () {
    for (var j = 0; j < num; j++) {
        ret = str.substr(0);
        ret = str.substr(0, 5);
        ret = str.substr(-1);
        ret = str.substr(-6, 1);
        ret = str.substr(15000, 5);
        ret = str.substr(12000, 5);
    }
});

// TESTS: substring

test("substring", function () {
    for (var j = 0; j < num; j++) {
        ret = str.substring(0);
        ret = str.substring(0, 5);
        ret = str.substring(-1);
        ret = str.substring(-6, -1);
        ret = str.substring(15000, 15005);
        ret = str.substring(12000, -1);
    }
});

// TESTS: toLower/UpperCase

test("toLowerCase", function () {
    for (var j = 0; j < num / 1000; j++) {
        ret = str.toLowerCase();
    }
});

test("toUpperCase", function () {
    for (var j = 0; j < num / 1000; j++) {
        ret = str.toUpperCase();
    }
});

// TESTS: comparing
prep(function () {
    tmp = str;
    tmp2 = str;
});

test("comparing", function () {
    tmp = "a" + tmp + "a";
    tmp2 = "a" + tmp2 + "a";
    for (var j = 0; j < num / 1000; j++) {
        ret = tmp == tmp2;
        ret = tmp < tmp2;
        ret = tmp > tmp2;
    }
});

endTest();